Raspberry Pi で I2C を利用するための設定
[最終更新] (2019/06/03 00:53:12)
最近の投稿
注目の記事

I2C とは

I2C (Inter Integrated Circuit; アイ スクエア シー) はシリアル通信の方式の一つです。この規格に準拠したデバイス同士は、二本の信号線だけでデータのやりとりを行えます。デバイス同士は対等ではなく、マスターに一つ以上の I2C スレーブを接続します。これらスレーブは同じ種類の IC である必要はありません。各種センサー、LCD、モータードライバ、A/D コンバータなど、様々な IC が I2C に対応しています。

二つの信号線

  • IC 同士でクロックを同期するための SCL (シリアルクロック)
  • データ通信のための SDA (シリアルデータ)

また、似たインターフェースとして Raspberry Pi はシリアル通信の SPI 規格にも対応しています。

初期設定

Raspberry Pi は I2C のマスターとして動作可能なデバイスです。既定では I2C が無効化されているため、初期設定が必要です。今回使用した Raspberry Pi は Model B+ です。リビジョンは以下のとおりです。

pi@raspberrypi:~ $ cat /proc/cpuinfo | grep Revision
Revision        : 0010

または

pi@raspberrypi:~ $ sudo python
>>> import RPi.GPIO as GPIO
>>> GPIO.RPI_REVISION
3

NOOBS のバージョンは以下のとおりです。

pi@raspberrypi:~ $ cat /etc/issue
Raspbian GNU/Linux 8 \n \l

pi@raspberrypi:~ $ uname -r
4.1.19+

ライブラリのインストールおよび I2C の有効化

以下のコマンドで必要なライブラリをインストールします。

sudo apt-get update
sudo apt-get install i2c-tools

初期設定画面を起動します。

sudo raspi-config

本ページで利用している OS のバージョンは上述の通り 4.1.19+ です。その場合は以下の画像のように Advanced Options を選択してエンターを押します。ただし、下記フォーラムにも記載のとおり、最新の Raspbian を利用している場合5 Interfacing Options を選択します。

advanced options I2C not showing
I have the same options to choose from in Advanced Settings as in your picture, but in 5 Interfacing Options I found the option P5 I2C
https://raspberrypi.stackexchange.com/questions/63076/advanced-options-i2c-not-showing

Uploaded Image

I2C を選択してエンターを押します。

Uploaded Image

Yes を選択して有効化します。

Uploaded Image

Uploaded Image

Yes を選択して既定で I2C を有効化するようにします。

Uploaded Image

Uploaded Image

Finish を選択してエンターを押します。

Uploaded Image

再起動します。

Uploaded Image

シリアル通信 baudrate の設定

I2C の動作周波数は、低速モード、高速モード等、デバイスによって異なります。以下のコマンドを実行して i2c-dev が記載されていることを確認します。

sudo vi /etc/modules

シリアル通信 baudrate を設定するために以下のコマンドを実行します。

sudo vi /boot/config.txt

最終行に dtparam=i2c_baudrate=50000 を追記して再起動します。

sudo reboot

設定が反映されていることを確認します。

dmesg | grep i2c

実行結果

[    4.607918] i2c /dev entries driver
[   12.712102] bcm2708_i2c 20804000.i2c: BSC1 Controller at 0x20804000 (irq 79) (baudrate 50000)

これは sudo raspi-config を実行して I2C 設定を変更すると初期化されますので注意してください。

I2C コマンドの使用確認

適切にインストールされた場合、例えば i2cdetect コマンドが使用できるようになっています。以下のコマンドで I2C バス一覧を確認します。

sudo i2cdetect -l

実行結果

i2c-1   i2c    20804000.i2c         I2C adapter

I2C バス 1 について、Raspberry Pi に接続された I2C デバイス一覧およびそれらのアドレスを確認します。

sudo i2cdetect -y 1

I2C デバイスには出荷時に 0x03 - 0x77 の範囲でアドレスが割り当てられています。I2C のマスターが複数のスレーブから適切な対象を識別して問い合わせるためにこれらのアドレスを用います。デバイスによっては検出できないものがあります。その場合はデータシートを参照して調べます。

I2C プログラミング

ACM1602NI に文字列 XYZ を表示するサンプルです。

Uploaded Image

この I2C デバイスは i2cdetect でアドレスを取得できません。データシートを参照すると 0x50 であることが分かります。

Slaver address could only set to 1010000, no other slaver address could be set.

LCD のピンは左から順に 1-7 です。

ピン番号 シンボル 機能 備考
1 VSS Ground
2 VDD 3.3V Raspberry Pi から供給可能
3 V0 LCD contrast adjust バックライトのコントラストを調整 (アナログ入力 0-3.3V)
4 SCL SERIAL CLOCK INPUT
5 SDA SERIAL DATA INPUT
6 BL+ Power Supply for BL+ デジタル入力 (ON/OFF)
7 BL- Power Supply for BL- グランド 0V

Raspberry Pi のピン配置を参考に回路を組みます。SCHEMATICS.COM で作成しました。

Uploaded Image

gpio コマンドでバックライトの ON/OFF を試してみましょう。

この続きが気になる方は

Raspberry Pi で I2C を利用するための設定

残り文字数は全体の約 28 %
くろねこ
100 円
関連ページ
    「AWS IoT ボタン」を用いずにインターネット経由でスマホによるラジコン操作 スマートフォンから操作できるブルドーザーロボットです。前進、後退、回転が可能です。Qoosky WebSocket API を利用しています。制作費は Raspberry Pi が既に手元にあれば追加でおおよそ 1 万円です。センサー機能が搭載されていないため正確な操作はできませんが、学校や職場から自宅のロボットを
    作り方 作品の簡単な説明 専用の IC を利用すると、簡単に温度や気圧を測定できます。インターネットに接続してグラフ化したりボットを作ったりと応用先は様々ですが、ここでは LCD に結果を表示する測定基板を作成します。 必要なパーツ 以下のパーツが必要になります。画像ではコンデンサを直列に接続したり抵抗を並列に接続したりしていますが、これは手元に適切な値のパーツがなかったためです。
    ADS1015 について Raspberry Pi には A/D コンバータが内蔵されていません。デジタル入出力、アナログ出力に加えてアナログ入力を行うためには外部 IC を利用する必要があります。ここでは I2C デバイスの ADS1015 を利用します。事前に I2C 設定を行っておいてください。 Python ライブラリを用いたサンプル